5.10. Ключевые слова в Go
Ключевые слова в Go
Язык Go имеет 25 ключевых слов. Все они имеют строго определённое назначение и не могут использоваться в качестве имён переменных, функций или других идентификаторов.
Таблица ключевых слов
| Ключевое слово | Значение | Пример |
|---|---|---|
break | Прерывает выполнение цикла или switch | for i := 0; i < 10; i++ { if i == 5 { break } } |
case | Определяет вариант в операторе switch или select | switch x { case 1: fmt.Println("один") } |
chan | Объявляет канал для передачи данных между горутинами | ch := make(chan int) |
const | Объявляет константу | const Pi = 3.14159 |
continue | Пропускает текущую итерацию цикла | for i := 0; i < 10; i++ { if i%2 == 0 { continue } } |
default | Определяет вариант по умолчанию в switch или select | switch x { default: fmt.Println("другое") } |
defer | Откладывает выполнение функции до завершения текущей функции | defer file.Close() |
else | Определяет блок кода при ложном условии if | if x > 0 { } else { fmt.Println("ноль или меньше") } |
fallthrough | Переходит к следующему case в switch | switch x { case 1: fallthrough; case 2: fmt.Println("1 или 2") } |
for | Организует цикл | for i := 0; i < 10; i++ { } |
func | Объявляет функцию | func add(a, b int) int { return a + b } |
go | Запускает функцию как горутину | go process(data) |
goto | Переходит к метке в коде | goto end; end: fmt.Println("конец") |
if | Выполняет блок кода при истинном условии | if x > 0 { fmt.Println("положительное") } |
import | Импортирует пакет | import "fmt" |
interface | Объявляет интерфейс | type Speaker interface { Speak() string } |
map | Объявляет ассоциативный массив | m := map[string]int{"one": 1} |
package | Объявляет пакет | package main |
range | Итерирует по элементам массива, среза, карты или канала | for i, v := range slice { } |
return | Возвращает значение из функции | func get() int { return 42 } |
select | Выбирает один из нескольких операций с каналами | select { case msg := <-ch: fmt.Println(msg) } |
struct | Объявляет структуру | type Point struct { X, Y int } |
switch | Выбирает один из нескольких вариантов выполнения | switch x { case 1: fmt.Println("один") } |
type | Объявляет новый тип | type Celsius float64 |
var | Объявляет переменную | var x int = 10 |
Предопределённые идентификаторы
Предопределённые идентификаторы не являются ключевыми словами, но имеют специальное значение в языке. Их можно переопределить в локальной области видимости, но делать это не рекомендуется.
| Идентификатор | Значение | Пример |
|---|---|---|
append | Добавляет элементы в срез | slice = append(slice, 1, 2, 3) |
bool | Логический тип данных | var flag bool = true |
byte | Псевдоним для uint8 | var b byte = 'A' |
cap | Возвращает ёмкость среза или канала | capacity := cap(slice) |
close | Закрывает канал | close(ch) |
complex | Создаёт комплексное число | c := complex(1.0, 2.0) |
complex64 | Тип комплексного числа с 32-битной мантиссой | var c complex64 |
complex128 | Тип комплексного числа с 64-битной мантиссой | var c complex128 |
copy | Копирует элементы из одного среза в другой | copy(dst, src) |
delete | Удаляет элемент из карты | delete(map, key) |
error | Встроенный интерфейс для ошибок | func do() error { return nil } |
false | Логическое значение "ложь" | var ok bool = false |
float32 | 32-битное число с плавающей точкой | var f float32 = 3.14 |
float64 | 64-битное число с плавающей точкой | var f float64 = 3.14159 |
imag | Возвращает мнимую часть комплексного числа | im := imag(c) |
int | Целочисленный тип (размер зависит от платформы) | var x int = 42 |
int8 | 8-битное целое со знаком | var x int8 = -128 |
int16 | 16-битное целое со знаком | var x int16 = 32767 |
int32 | 32-битное целое со знаком | var x int32 = 1<<31 - 1 |
int64 | 64-битное целое со знаком | var x int64 = 1<<63 - 1 |
iota | Счётчик в константных объявлениях | const ( A = iota; B; C ) // 0, 1, 2 |
len | Возвращает длину среза, карты, строки или канала | length := len(slice) |
make | Создаёт срез, карту или канал | slice := make([]int, 10) |
new | Выделяет память и возвращает указатель | ptr := new(int) |
nil | Нулевое значение для указателей, карт, срезов, каналов, интерфейсов, функций | var m map[string]int = nil |
panic | Вызывает панику (аварийное завершение) | panic("что-то пошло не так") |
print | Выводит значение в стандартный вывод | print("hello") |
println | Выводит значение с новой строки | println("hello") |
real | Возвращает действительную часть комплексного числа | re := real(c) |
recover | Восстанавливает выполнение после паники | defer func() { if r := recover(); r != nil { } }() |
rune | Псевдоним для int32, представляет символ Юникода | var r rune = 'я' |
string | Тип строки | var s string = "hello" |
true | Логическое значение "истина" | var ok bool = true |
uint | Беззнаковое целое (размер зависит от платформы) | var x uint = 42 |
uint8 | 8-битное целое без знака | var x uint8 = 255 |
uint16 | 16-битное целое без знака | var x uint16 = 65535 |
uint32 | 32-битное целое без знака | var x uint32 = 1<<32 - 1 |
uint64 | 64-битное целое без знака | var x uint64 = 1<<64 - 1 |
uintptr | Целочисленный тип для хранения адреса памяти | var p uintptr |
Краткое описание категорий ключевых слов
Объявление и определение
var,const,type,func,package,import— создают сущности в программе
Поток управления
if,else,switch,case,default,fallthrough,for,range,break,continue,goto— управляют последовательностью выполнения
Составные типы
struct,interface,map,chan— определяют сложные типы данных
Параллелизм
go,select,chan— поддерживают конкурентное выполнение
Отложенное выполнение
defer— планирует выполнение на момент выхода из функции
Возврат значения
return— завершает функцию и возвращает результат